package com.seafood.service;

import com.seafood.dto.TemperatureLogDTO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 温度记录服务接口
 */
public interface TemperatureLogService {
    
    /**
     * 创建温度记录
     */
    TemperatureLogDTO createTemperatureLog(TemperatureLogDTO logDTO);
    
    /**
     * 批量创建温度记录
     */
    List<TemperatureLogDTO> createTemperatureLogs(List<TemperatureLogDTO> logDTOs);
    
    /**
     * 根据ID获取温度记录
     */
    TemperatureLogDTO getTemperatureLogById(Long id);
    
    /**
     * 根据冷链记录ID获取温度记录列表
     */
    List<TemperatureLogDTO> getTemperatureLogsByColdChainRecordId(Long coldChainRecordId);
    
    /**
     * 获取最近的温度记录
     */
    Page<TemperatureLogDTO> getRecentTemperatureLogs(Long coldChainRecordId, Pageable pageable);
    
    /**
     * 获取异常温度记录
     */
    List<TemperatureLogDTO> getAbnormalTemperatureLogs(Long coldChainRecordId);
    
    /**
     * 根据温度范围查找记录
     */
    List<TemperatureLogDTO> getTemperatureLogsByRange(Long coldChainRecordId, BigDecimal minTemp, BigDecimal maxTemp);
    
    /**
     * 根据时间范围查找温度记录
     */
    List<TemperatureLogDTO> getTemperatureLogsByTimeRange(Long coldChainRecordId, LocalDateTime startTime, LocalDateTime endTime);
    
    /**
     * 获取设备离线记录
     */
    List<TemperatureLogDTO> getOfflineDeviceLogs(Long coldChainRecordId);
    
    /**
     * 获取温度统计信息
     */
    Map<String, Object> getTemperatureStatistics(Long coldChainRecordId);
    
    /**
     * 获取湿度统计信息
     */
    Map<String, Object> getHumidityStatistics(Long coldChainRecordId);
    
    /**
     * 检查温度异常
     */
    boolean checkTemperatureAbnormal(Long coldChainRecordId, BigDecimal temperature);
    
    /**
     * 检查湿度异常
     */
    boolean checkHumidityAbnormal(Long coldChainRecordId, BigDecimal humidity);
    
    /**
     * 统计异常记录数量
     */
    Long countAbnormalLogs(Long coldChainRecordId);
    
    /**
     * 生成温度趋势报告
     */
    Map<String, Object> generateTemperatureTrendReport(Long coldChainRecordId, LocalDateTime startTime, LocalDateTime endTime);
    
    /**
     * 清理旧数据
     */
    void cleanupOldLogs(LocalDateTime cutoffTime);
    
    /**
     * 删除温度记录
     */
    void deleteTemperatureLog(Long id);
}